本文最后更新于:2023年8月25日 下午
                  
                
              
            
            
              
                
                [TOC]
[SUCTF2018]single dog 我们使用foremost分离jpg图片
打开txt文件:
发现是js颜文字加密(AAEncode) ,使用   AAEncode解密 
我吃三明治 我们在图片中发现了一串类似base32加密的串:
使用base32网站解密
sqltest 我们使用 wireshark 打开 pcapng 文件,然后导出http对象:
我们发现有很多 sql注入的测试,我们可以通过这些sql注入来判断flag
我们一个一个判断,得出flag的ascii值:
102 108 97 103 123 52 55 101 100 98 56 51 48 48 101 100 53 102 57 98 50  56 102 99 53 52 98 48 100 48 57 101 99 100 101 102 55 125
我们将其转化为字符:
[SWPU2019]你有没有好好看网课? 
我们使用 ARCHPR 爆破密码:
打开文件夹:
我们打开 word文档:
5.20 7.11这个猜测是视频的秒数,我们使用 Kinovea 打开视频(可以一帧一帧的看视频):
在 5.66秒处发现提示
敲击码 :
1 .....  ../...  ./...  ./...  ../ 
1 2 3 ..... ../... ./ ... ./... ../ 	通过斜杠分为不同的组5   2  / 3 1 /  3  1 / 3 2/ 
在 7.36 秒 发现第二段信息:
base64解密,我们可以使用 php -r 在命令行执行php代码
两段密码拼接一下得到 flag1 压缩包密码。
010Editor 打开图片得到flag
[ACTF新生赛2020]NTFS数据流 
NTFS交换数据流(alternate data streams,简称ADS )是NTFS磁盘格式的一个特性,在NTFS文件系统下,每个文件都可以存在多个数据流,就是说除了主文件流之外还可以有许多非主文件流寄宿在主文件流中。它使用资源派生来维持与文件相关的信息,虽然我们无法看到数据流文件,但是它却是真实存在于我们的系统中的。创建一个数据交换流文件的方法很简单,命令为“宿主文件:准备与宿主文件关联的数据流文件”。————百度百科
 
我们打开文件夹,发现一个大小不一样的文件:
注意:这里解压的时候使用Win RAR解压,涉及NTFS流的都需要Win RAR解压 
然后我们使用工具 :NtfsStreamsEditor  扫描txt文件:
发现 293.txt 文件中 还存在一个flag.txt 文件,直接打开获得flag。
或者,使用命令 notepad 打开:
john-in-the-middle 使用 wireshark 带出http对象:
使用 stegsolve分析,得到flag
[ACTF新生赛2020]swp 我们导出 http 对象,发现一个 secret.zip 压缩包
然后发现是 zip 伪加密,我们可以使用工具:ZipCenOp 修复:
搜索 ctf 发现 flag:
喵喵喵 首先我们使用 Stegsolve 打开:
发现图片 Blue 0通道 有问题
我们使用 Data Extract ,LSB隐写 ,我们使用 BGR 的位平面顺序:
保存为 png 图片,一张不全的二维码,我们改一下高度:
扫码获得一个链接,下载得到一个txt文件:
说flag不在这里,但是肯定在这里,只是我们看不到而已看,我们想到了 NTFS数据流隐写  ,我们使用工具:NtfsStreamsEditor2 
发现隐藏了一个 flag.pyc 文件,我们导出该文件。
pyc文件 就是由Python文件经过编译后所生成的文件,py文件编译成pyc文件后加载速度更快而且提高了代码的安全性。
 
我们知道 pyc 文件是 python经过编译后的文件,我们可以使用  反编译 
获得 py文件,我们只需要将代码反过来,自己写一个解码函数,将其解码即可:
1 2 3 4 5 6 7 8 9 10 11 def  decode (ciphertext ):1 ]for  i in  range (len (ciphertext)):int (ciphertext[i])if  i % 2  == 0 :chr (ciphertext[i] - 10 ) else :chr (ciphertext[i] + 10 ) chr (ord (ciphertext[i]) ^ i)print (s,end="" )
[GXYCTF2019]SXMgdGhpcyBiYXNlPw== 打开txt文件,发现很多base64编码
我们怀疑这可能是base64隐写 ,我们使用脚本:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 def  get_base64_diff_value (s1, s2 ):'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/' 0 for  i in  xrange(len (s2)):if  s1[i] != s2[i]:return  abs (base64chars.index(s1[i]) - base64chars.index(s2[i]))return  resdef  solve_stego ():with  open ('C://Users/LIKE/Desktop/base64.txt' , 'rb' ) as  f:'' for  line in  file_lines:'\n' , '' )'\n' , '' ).decode('base64' ).encode('base64' ).replace('\n' , '' )print  diff'=' )if  diff:bin (diff)[2 :].zfill(pads_num * 2 )else :'0'  * pads_num * 2 print  goflag(bin_str)def  goflag (bin_str ):'' for  i in  xrange(0 , len (bin_str), 8 ):chr (int (bin_str[i:i + 8 ], 2 ))return  res_strif  __name__ == '__main__' :
解密得到flag:
间谍启示录 
在城际公路的小道上,罪犯G正在被警方追赶。警官X眼看他正要逃脱,于是不得已开枪击中了罪犯G。罪犯G情急之下将一个物体抛到了前方湍急的河流中,便头一歪突然倒地。警官X接近一看,目标服毒身亡。数分钟后,警方找到了罪犯遗失物体,是一个U盘,可惜警方只来得及复制镜像,U盘便报废了。警方现在拜托你在这个镜像中找到罪犯似乎想隐藏的秘密。 注意:得到的 flag 请包上 flag{} 提交
 
下载得到一个 iso  文件,我们使用foremost分离,发现一个压缩包:
双击运行flag.exe,获得一个txt文件,得到flag:
[UTCTF2020]docx 下载后获得一个 word文档,我们将其后缀改为 zip 解压:
然后我们在: word/media 文件夹中发现flag
Mysterious 
自从报名了CTF竞赛后,小明就辗转于各大论坛,但是对于逆向题目仍是一知半解。有一天,一个论坛老鸟给小明发了一个神秘的盒子,里面有开启逆向思维的秘密。小明如获至宝,三天三夜,终于解答出来了,聪明的你能搞定这个神秘盒子么? 注意:得到的 flag 请包上 flag{} 提交
 
下载后获得一个 exe 文件:
使用记事本打开:
PE...L... 说明是32位。
或者linux使用file命令 :
此处是32位,所以我们使用逆向工具 :ida打开
Shift+F12 查看字符串:
发现 well_done 可疑,我们点进去:
疑似flag的字符串,我们找到这个地址 sub_401090 ,点击后,按 F5 进行反汇编 :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 if  ( a3 == 1000  )GetDlgItemTextA (hWnd, 1002 , String , 260 );strlen (String );if  ( strlen (String ) > 6  )ExitProcess (0 );atoi (String );1 ;if  ( v4 == 122  && String [3 ] == 120  && String [5 ] == 122  && String [4 ] == 121  )strcpy (Text, "flag" );memset (&Text[5 ], 0 , 0xFC u);0 ;0 ;10 );strcat (Text, "{" );strcat (Text, Source);strcat (Text, "_" );strcat (Text, "Buff3r_0v3rf|0w" );strcat (Text, "}" );MessageBoxA (0 , Text, "well done" , 0 );SetTimer (hWnd, 1u , 0x3E8 u, TimerFunc);
根据分析 我们输入 122xyz 可以获得flag:
弱口令 
老菜鸡,伤了神,别灰心,莫放弃,试试弱口令 注意:得到的 flag 请包上 flag{} 提交
 
下载后得到zip压缩包,在注释中藏有信息。
我们把它复制到 sublime 中:
这时莫斯电码,我们把空格看成 .  tab键看成 -  
1 ....  . .-..  .-..  -----  ..-.  ---  .-.  ..-  --
摩斯电码解密 
使用该密码将压缩包进行解密,得到一张图片:
然后这里的考点是 弱口令LSB隐写 ,我们使用工具 : cloacked-pixel
这个工具要安装好多模块,容易报错..
由于是弱口令,我们猜测密码为 123456
flag.txt文件包含flag
[RoarCTF2019]黄金6年 下载mp4文件,我们使用 Kinovea 打开:
发现有几个二维码
Kinovea没有key4,我们可以使用potplayer : F键前进一帧,D键倒退一帧,空格键正常播放
010Editor 打开MP4:
 base64解码 
另存为 rar,使用key解压,得到flag
小易的U盘 
小易的U盘中了一个奇怪的病毒,电脑中莫名其妙会多出来东西。小易重装了系统,把U盘送到了攻防实验室,希望借各位的知识分析出里面有啥。请大家加油噢,不过他特别关照,千万别乱点他U盘中的资料,那是机密。 注意:得到的 flag 请包上 flag{} 提交
 
我们使用 foremost 分离 iso文件,然后在 autorun.inf 文件中发现:
flag与 autoflag - 副本 (32).exe 文件有关,我们可以使用 ida 打开exe文件获得flag,
或者使用 strings命令获得flag:strings 32.exe | grep "flag"
[WUSTCTF2020]alison_likes_jojo 首先下载获得两个jpg图片,然后使用foremost分离其中一张图片,得到一个加密压缩包:
使用 ARCHPR 爆破 ,得到密码:888866
打开获得base64加密字符串,三次解码:killerqueen
由于是 jpg 图片隐写,所以我们尝试几次 :那些图片隐写中的神操作之JPG 
我们发现这里是 outguess 隐写 ,我们使用key解密:
1 outguess  -k "killerqueen"  -r "jljy.jpg"  flag.txt
获得flag
[安洵杯 2019]吹着贝斯扫二维码 下载后得到一个文件夹,里面有很多文件,我们使用 010Editor打开后发现都是jpg图片,我们使用脚本改后缀:
1 2 3 4 5 6 7 import  osr'C:\Users\LIKE\Desktop\dir'   for  i in  os.listdir(path):  '.jpg' )
我们发现都是二维码,我们需要拼图,
每一个图片最后都有顺序,我们按照这个顺序使用ps进行拼图:
如下:
扫码得到:
(这个编码应该从右往左读)
我们打开zip文件:显然这是base32编码
base32解码: 3A715D3E574E36326F733C5E625D213B2C62652E3D6E3B7640392F3137274038624148
然后转为 16进制字符串: :q]>WN62os<^b]!;,be.=n;v@9/17'@8bAH
然后这里提示一个 13编码,这里为 rot13,我们解密:
:d]>JA62bf<^o]!;,or.=a;i@9/17'@8oNU
然后base85解密:
PCtvdWU4VFJnQUByYy4mK1lraTA=
base64解密: <+oue8TRgA@rc.&+Yki0
最后base85解密:ThisIsSecret!233
解压zip获得flag
[WUSTCTF2020]爬 下载一个文件,使用 010Editor 打开,发现是一个pdf文件,改后缀为pdf,然后打开:
说flag被遮住了,我们使用 pdf编辑器删除上面的图片,里面还有一张图片:
发现是16进制,我们将其转化为字符串即可得到flag。
flag{th1s_1s_@_pdf_and_y0u_can_use_phot0sh0p}
zip 我们首先下载,然后得到一个文件夹里面有很多 zip 文件,全被加密了:
但是我们发现每一个压缩包里的txt文件内容很小,都只有 4字节,于是我们可以使用crc32值进行
crc32 4字节爆破 
我们使用脚本爆破(也可以使用github上的脚本):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 import  zipfileimport  stringimport  binasciidef  CrackCrc (crc ):for  i in  dic:for  j in  dic:for  k in  dic:for  h in  dic:if  crc == (binascii.crc32(s.encode())):return def  CrackZip ():for  i in  range (0 , 68 ):r"C://Users/LIKE/Desktop/dir/"  + 'out'  + str (i) + '.zip' 'r' ).getinfo('data.txt' ).CRC print ('\r'  + "loading:{:%}" .format (float ((i + 1 ) / 68 )), end='' )'+/=' open ('out.txt' , 'w' )print ("\nCRC32begin" )print ("CRC32finished" )
获得一串base64编码,我们解密一下:
这16进制结尾应该是rar文件 ,缺少文件头 52 61 72 21 1A 07 00 ,我们补上,打开rar文件:
从娃娃抓起 
题目描述:伟人的一句话,标志着一个时代的开始。那句熟悉的话,改变了许多人的一生,为中国三十年来计算机产业发展铺垫了道路。两种不同的汉字编码分别代表了汉字信息化道路上的两座伟大里程碑。请将你得到的话转为md5提交,md5统一为32位小写。
 
打开txt文件,第2行应该是五笔输入法,第一行是 中文电码。
中文电码解密 
 在线五笔输入 
人工智能也要从娃娃抓起
md5加密
[GUET-CTF2019]zips 首先下载得到 zip压缩包 222.zip ,发现需要密码,但是我们不知道,我们只能使用 ARCHPR 爆破,获得密码,解压缩得到 111.zip
发现是伪加密,我们可以使用工具 ZipCenOp 修复伪加密
1 java  -jar  ZipCenOp.jar  r 111 .zip
打开,发现 setup.sh 文件:
1 2 3 #!/bin/bash "print(__import__('time').time())" ` flag.zip flag
这里使用了 时间戳当作压缩包密码进行解压,但是我们不知道时间是多少。
我们先查看一下当前的时间戳(注意是python2):
我们通过文件修改日期推测 时间戳是 15…..
我们可以使用掩码爆破 ,进行解压:
获得时间戳,我们进行解压,得到flag
[DDCTF2018](╯°□°)╯︵ ┻━┻ 打开txt文件:
1 d4e8 e1 f4 a0 f7e1 f3 a0e6 e1 f3 f4 a1 a0 d4e8 e5 a0e6 ece1e7 a0e9 f3 baa0 c 4 c 4 c 3 d4 c 6 fbb9 b2 b2e1 e2 b9 b9 b7 b4e1 b4 b7e3 e4 b3 b2 b2e3 e6 b4 b3e2 b5 b0 b6 b1 b0e6 e1e5 e1 b5 fd
长度134的字16进制符串,每两位进行截取
1 ['d4 ', 'e8 ', 'e1 ', 'f4 ', 'a0 ', 'f7 ', 'e1 ', 'f3 ', 'a0 ', 'e6 ', 'e1 ', 'f3 ', 'f4 ', 'a1 ', 'a0 ', 'd4 ', 'e8 ', 'e5 ', 'a0 ', 'e6 ', 'ec ', 'e1 ', 'e7 ', 'a0 ', 'e9 ', 'f3 ', 'ba ', 'a0 ', 'c4 ', 'c4 ', 'c3 ', 'd4 ', 'c6 ', 'fb ', 'b9 ', 'b2 ', 'b2 ', 'e1 ', 'e2 ', 'b9 ', 'b9 ', 'b7 ', 'b4 ', 'e1 ', 'b4 ', 'b7 ', 'e3 ', 'e4 ', 'b3 ', 'b2 ', 'b2 ', 'e3 ', 'e6 ', 'b4 ', 'b3 ', 'e2 ', 'b5 ', 'b0 ', 'b6 ', 'b1 ', 'b0 ', 'e6 ', 'e1 ', 'e5 ', 'e1 ', 'b5 ', 'fd ']
转为10进制:
1 [212, 232, 225, 244, 160, 247, 225, 243, 160, 230, 225, 243, 244, 161, 160, 212, 232, 229, 160, 230, 236, 225, 231, 160, 233, 243, 186, 160, 196, 196, 195, 212, 198, 251, 185, 178, 178, 225, 226, 185, 185, 183, 180, 225, 180, 183, 227, 228, 179, 178, 178, 227, 230, 180, 179, 226, 181, 176, 182, 177, 176, 230, 225, 229, 225, 181, 253] 
将大于 128的数字减128得到ascii码:
1 [84, 104, 97, 116, 32, 119, 97, 115, 32, 102, 97, 115, 116, 33, 32, 84, 104, 101, 32, 102, 108, 97, 103, 32, 105, 115, 58, 32, 68, 68, 67, 84, 70, 123, 57, 50, 50, 97, 98, 57, 57, 55, 52, 97, 52, 55, 99, 100, 51, 50, 50, 99, 102, 52, 51, 98, 53, 48, 54, 49, 48, 102, 97, 101, 97, 53, 125] 
全部转为字符:
1 That was fast! The flag is : DDCTF{922 ab9974a47cd322cf43b50610faea5}
脚本:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 def  hex_str (str for  i in  range (0 ,len (str )-1 ,2 ):str [i:i+2 ]print ("hex列表:%s\n" %hex_str_list)def  hex_to_str (hex_str_list ):'' for  i in  range (0 ,len (hex_str_list)):int ('0x%s' %hex_str_list[i],16 )128 )for  i in  range (0 ,len (dec_list)):chr (dec_list[i])print ("转化为十进制int列表:%s\n" %int_list)print ("-128得到ASCII十进制dec列表:%s\n" %dec_list)print ('最终答案:%s' %flag)if  __name__=='__main__' :str ='d4e8e1f4a0f7e1f3a0e6e1f3f4a1a0d4e8e5a0e6ece1e7a0e9f3baa0c4c4c3d4c6fbb9b2b2e1e2b9b9b7b4e1b4b7e3e4b3b2b2e3e6b4b3e2b5b0b6b1b0e6e1e5e1b5fd' print ("字符串长度:%s" %len (str ))str )
[WUSTCTF2020]girlfriend 下载获得一个 wav音频文件,播放一下,听起来像打电话,于是我们可以使用工具 dtmf2num,进行拨号音识别:
1 999 *666 *88 *2 *777 *33 *6 *999 *4 *444 *777 *555 *333 *777 *444 *33 *66 *3 *7777 
看这一串数字,应该是手机键盘加密。
999就是指按三下数字9得到的字母也就是y,以此类推,数字对应手机的每个键位,几个数字代表按几下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 999      666      88       2        777      33       6        999      4        4444     777      555      333      777      444      33       66       3        7777     
[MRCTF2020]千层套路 这一题是一个 zip无线套娃题
脚本:
1 2 3 4 5 6 7 8 9 10 11 12 13 import  zipfile"0573.zip" while  zipfile.is_zipfile("zip/"  + filepath): "." )[0 ] "zip/"  + filepath) r"D:\Applications\CTF\phpstudy_pro\WWW\scripts_py\BUUCTF\zip" , pwd=pwd.encode('utf-8' ))print (filepath)print ("解压成功!" )
[XMAN2018排位赛]通行证 首先base64解密:
得到: kanbbrgghjl{zb____}vtlaln ,这个可能是栅栏密码。
注意:此处是栅栏加密,不是解密 栅栏密码 
每组字数为7。
然后发现应该凯撒解密,得到flag
1 xman {oyay_now_you_get_it} 
百里挑一 下载得到一个 pcapng文件,我们使用 wireshark导出 http对象,发现一堆图片。
然后我们使用 exiftool 工具 ,查看所有图片的 详细信息,并且过滤出带有 { 的字段
我们得到了一半的 flag
我们我们在 wireshark 中过滤,查找字符串 Exif:
找到另一半flag:
[SUCTF2018]followme 我们使用 wireshark 导出 http对象:
一大串登录的东西
我们使用 linux grep 命令
grep -r "CTF" 查找整个目录下的字符串,得到flag
使用 010Editor 改一下文件头即可
[MRCTF2020]CyberPunk 下载后获得一个exe程序,打开:
提示说,只要我们时间是 2020.9.17 就能得到flag。
我们只需要修改计算机系统时间为 2020.9.17 即可
[安洵杯 2019]Attack 首先使用 foremost 分离 pcap 文件,得到一个压缩包:
然后查看wp后,发现这个需要获取到管理员的密码去解压。
我们这里需要用到一个工具: mimikatz
mimikatz 在内网渗透中是个很有用的工具。mimikatz可以在内存中爬取到明文密码 
 
下载:https://github.com/gentilkiwi/mimikatz/releases/ 
然后我们可以使用 wireshark 去导出 lsass.dmp 内存镜像
关于lsass 
 lsass 是windows系统的一个进程,用于本地安全和登陆策略。
mimikatz可以从 lsass.exe 里获取windows处于active状态账号明文密码 。
 
本题的lsass.dmp就是内存运行的镜像,也可以提取到账户密码
如何使用?我们可以先将 lsass.dmp 复制到mimikatz目录下
然后右键管理员运行  mimikatz.exe:(不用会报错)
输入:
1 2 3 4 5 6 ::debug ::minidump  lsass.dmp::logonpasswords  full 
得到:
密码: W3lc0meToD0g3
解压zip得到flag
[SUCTF 2019]Game 下载后得到一个游戏源码和一张图片。
在游戏源码 index.html 中,我们发现了一个fake flag:
这是base32编码,我们解码: suctf{hAHaha_Fak3_F1ag}  一个假的flag
然后我们去分析图片:
我们发现了 LSB隐写:
 这一串看着像 base64,但是我们解码一下: Salted__³4yíYRÁ|ÜTVK»¤&Ñ:?)ëËÊkU
Salted开头,一个是 AES、DES等编码,经过测试,发现是 3DES 即:TripleDES
密钥就是:suctf{hAHaha_Fak3_F1ag},
解密得到flag:https://www.sojson.com/encrypt_triple_des.html 
USB 
Do your konw usb?? 注意:得到的 flag 请包上 flag{} 提交
 
下载后得到一个 rar压缩包 和 key.ftm 文件
使用 010Editor 打开 key.ftm :
我们发现其中隐藏着 zip压缩包,我们使用 foremost 分离得到 流量包文件:
观察可知,这是USB流量包分析 ,这一题是 USB键盘流量分析.
USB流量 指的是USB设备接口的流量,攻击者能够通过监听usb接口流量获取键盘敲击键、鼠标移动与点击、存储设备的铭文传输通信、USB无线网卡网络传输内容等等。在CTF中,USB流量分析主要以键盘和鼠标流量为主。
 
键盘流量 
USB协议数据部分在Leftover Capture Data域中,数据长度为八个字节。其中键盘击键信息集中在第三个字节中。
 
如图,发现击键信息为0x06,即对应的按键为C《USB键盘协议中键码》中的HID Usage ID 
我们可以使用 linux 的 tshark命令 把usb流量包key.pcap中 capdata 读取出来:
1 2 tshark -r key.pcap -T fields -e usb.capdata > usbdata.txt'/^\s*$/d'  > usbdata.txt 
我们查看一下txt文件:
提取出来的数据可能会带冒号 ,也可能不带(有可能和wireshark的版本相关),但是一般的脚本都会按照有冒号的数据来识别
有冒号时提取数据的[6:8][4:6]
 
可以用脚本来加上冒号:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 open ('C://Users/LIKE/Desktop/data.txt' , 'r' )open ('C://Users/LIKE/Desktop/out.txt' , 'w' )while  1 :if  a:if  len (a) == 16 :  '' for  i in  range (0 , len (a), 2 ):if  i + 2  != len (a):1 ] + ":" else :1 ]'\n' )else :break 
如图:
此时对应的第三字节,也就是**[6:8]**就代表了击键信息
提取出键盘流量后需要用脚本还原数据对应的信息 。同时找到两个还原信息的脚本:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 0x04 :"A" ,  0x05 :"B" ,  0x06 :"C" , 0x07 :"D" , 0x08 :"E" , 0x09 :"F" , 0x0A :"G" ,  0x0B :"H" , 0x0C :"I" ,  0x0D :"J" , 0x0E :"K" , 0x0F :"L" , 0x10 :"M" , 0x11 :"N" ,0x12 :"O" ,  0x13 :"P" , 0x14 :"Q" , 0x15 :"R" , 0x16 :"S" , 0x17 :"T" , 0x18 :"U" ,0x19 :"V" , 0x1A :"W" , 0x1B :"X" , 0x1C :"Y" , 0x1D :"Z" , 0x1E :"1" , 0x1F :"2" , 0x20 :"3" , 0x21 :"4" , 0x22 :"5" ,  0x23 :"6" , 0x24 :"7" , 0x25 :"8" , 0x26 :"9" , 0x27 :"0" , 0x28 :"\n" , 0x2a :"[DEL]" ,  0X2B :"    " , 0x2C :" " ,  0x2D :"-" , 0x2E :"=" , 0x2F :"[" ,  0x30 :"]" ,  0x31 :"\\" , 0x32 :"~" , 0x33 :";" ,  0x34 :"'" , 0x36 :"," ,  0x37 :"."  }open ('C://Users/LIKE/Desktop/out.txt' )for  line in  keys:if  line[0 ]!='0'  or  line[1 ]!='0'  or  line[3 ]!='0'  or  line[4 ]!='0'  or  line[9 ]!='0'  or  line[10 ]!='0'  or  line[12 ]!='0'  or  line[13 ]!='0'  or  line[15 ]!='0'  or  line[16 ]!='0'  or  line[18 ]!='0'  or  line[19 ]!='0'  or  line[21 ]!='0'  or  line[22 ]!='0' :continue int (line[6 :8 ],16 ))"" for  n in  nums:if  n == 0  :continue if  n in  mappings:else :'[unknown]' print  'output :\n'  + output
脚本2(两个都可以):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 "04" :"a" , "05" :"b" , "06" :"c" , "07" :"d" , "08" :"e" ,"09" :"f" , "0a" :"g" , "0b" :"h" , "0c" :"i" , "0d" :"j" ,"0e" :"k" , "0f" :"l" , "10" :"m" , "11" :"n" , "12" :"o" ,"13" :"p" , "14" :"q" , "15" :"r" , "16" :"s" , "17" :"t" ,"18" :"u" , "19" :"v" , "1a" :"w" , "1b" :"x" , "1c" :"y" ,"1d" :"z" ,"1e" :"1" , "1f" :"2" , "20" :"3" , "21" :"4" ,"22" :"5" , "23" :"6" ,"24" :"7" ,"25" :"8" ,"26" :"9" ,"27" :"0" ,"28" :"<RET>" ,"29" :"<ESC>" ,"2a" :"<DEL>" , "2b" :"\t" ,"2c" :"<SPACE>" ,"2d" :"-" ,"2e" :"=" ,"2f" :"[" ,"30" :"]" ,"31" :"\\" ,"32" :"<NON>" ,"33" :";" ,"34" :"'" ,"35" :"<GA>" ,"36" :"," ,"37" :"." ,"38" :"/" ,"39" :"<CAP>" ,"3a" :"<F1>" ,"3b" :"<F2>" , "3c" :"<F3>" ,"3d" :"<F4>" ,"3e" :"<F5>" ,"3f" :"<F6>" ,"40" :"<F7>" ,"41" :"<F8>" ,"42" :"<F9>" ,"43" :"<F10>" ,"44" :"<F11>" ,"45" :"<F12>" }"04" :"A" , "05" :"B" , "06" :"C" , "07" :"D" , "08" :"E" ,"09" :"F" , "0a" :"G" , "0b" :"H" , "0c" :"I" , "0d" :"J" ,"0e" :"K" , "0f" :"L" , "10" :"M" , "11" :"N" , "12" :"O" ,"13" :"P" , "14" :"Q" , "15" :"R" , "16" :"S" , "17" :"T" ,"18" :"U" , "19" :"V" , "1a" :"W" , "1b" :"X" , "1c" :"Y" ,"1d" :"Z" ,"1e" :"!" , "1f" :"@" , "20" :"#" , "21" :"$" ,"22" :"%" , "23" :"^" ,"24" :"&" ,"25" :"*" ,"26" :"(" ,"27" :")" ,"28" :"<RET>" ,"29" :"<ESC>" ,"2a" :"<DEL>" , "2b" :"\t" ,"2c" :"<SPACE>" ,"2d" :"_" ,"2e" :"+" ,"2f" :"{" ,"30" :"}" ,"31" :"|" ,"32" :"<NON>" ,"33" :"\"" ,"34" :":" ,"35" :"<GA>" ,"36" :"<" ,"37" :">" ,"38" :"?" ,"39" :"<CAP>" ,"3a" :"<F1>" ,"3b" :"<F2>" , "3c" :"<F3>" ,"3d" :"<F4>" ,"3e" :"<F5>" ,"3f" :"<F6>" ,"40" :"<F7>" ,"41" :"<F8>" ,"42" :"<F9>" ,"43" :"<F10>" ,"44" :"<F11>" ,"45" :"<F12>" }open ('C://Users/LIKE/Desktop/out.txt' )for  line in  keys:try :if  line[0 ]!='0'  or  (line[1 ]!='0'  and  line[1 ]!='2' ) or  line[3 ]!='0'  or  line[4 ]!='0'  or  line[9 ]!='0'  or  line[10 ]!='0'  or  line[12 ]!='0'  or  line[13 ]!='0'  or  line[15 ]!='0'  or  line[16 ]!='0'  or  line[18 ]!='0'  or  line[19 ]!='0'  or  line[21 ]!='0'  or  line[22 ]!='0'  or  line[6 :8 ]=="00" :continue if  line[6 :8 ] in  normalKeys.keys():6 :8 ]]],[shiftKeys[line[6 :8 ]]]][line[1 ]=='2' ]else :'[unknown]' ]except :pass 0 print ("" .join(output))for  i in  range (len (output)):try :'<DEL>' )del  output[a]del  output[a-1 ]except :pass for  i in  range (len (output)):try :if  output[i]=="<CAP>" :1 if  flag==2 :0 if  flag!=0 :except :pass print  ('output :'  + "" .join(output))
运行脚本:
于是我们得到密钥:xinan
参考:USB流量分析 
我们也可以使用工具: UsbKeyboardDataHacker
接着我们再分析那一个rar压缩包:
发现文件头损坏,于是查资料进行对照,
将这里改为 74 即可:
我们得到一张 png 图片,使用 stegsolve 在blue 0 通道 发现二维码:
扫码获得:ci{v3erf_0tygidv2_fc0}
可能是栅栏密码,我们解密一下,得到:cyig{ivd3ve2r_ff_c00t}
这个很想凯撒密码,但是不是,
查阅资料得知了一个密码:**维吉尼亚密码**
凯撒密码 中,字母表中的每一字母都会作一定的偏移。
【维吉尼亚密码 】则是由一些偏移量不同的恺撒密码组成
为了生成密码,需要使用表格法 。
这一表格包括了26行字母表,每一行都由前一行向左偏移一位得到。具体使用哪一行字母表进行编译是基于密钥进行的,在过程中会不断地变换。
 
例如,假设明文 为:HEETIAN
  然后选择某一关键词并重复 而得到密钥 ,如关键词为LAB时,密钥为:LABLABL
  对于明文的第一个字母H,对应密钥的第一个字母L,于是使用表格中L行字母表进行加密,得到密文第一个字母S。
  明文:HEETIAN
  密钥:LABLABL
  密文:SEFEIBY
  解密的过程则与加密相反。 
 
简单地说:【维吉尼亚密码 】是由一些偏移量不同 的恺撒密码组成,解密需要密钥。
因此我们可以进行解密,但是尝试之后,我们发现需要:先维吉尼亚密码解密,再栅栏解密。
然后栅栏解密: